package com.newtouch.bxzs.business.statistics.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.newtouch.bxzs.business.statistics.model.bo.*;
import com.newtouch.bxzs.business.statistics.model.vo.AchievementMonthlyDetailVO;
import com.newtouch.bxzs.business.statistics.model.vo.AchievementRankingVO;
import com.newtouch.bxzs.business.statistics.model.vo.AchievementSummaryVO;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;

/**
 * 个人业绩服务接口
 *
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2021/1/7</td>
 * <td>tianshangzhu</td>
 * <td>Create</td>
 * </tr>
 * </table>
 *
 * @author tianshangzhu
 * @version 1.0.0
 * @since 1.0.0
 */
@Component
public interface AchievementService {


    /**
     * 获取个人业绩保单明细
     * @param policyNumber 保单号
     * @return 业绩保单详细
     */
    AchievementPolicyDetailBO  getAchievementPolicyDetail(String policyNumber);

    /**
     * 获取个人业绩汇总
     * @param achievementSummaryVO 年月、公司、访问端口
     * @return 业绩汇总列表
     */
    List<AchievementSummaryBO> getAchievementSummaryByOrg(AchievementSummaryVO achievementSummaryVO);

    /**
     * 获取业绩月度明细
     * @param achievementMonthlyDetailVO 参数vo
     * @return 月度明细列表
     */
    IPage<AchievementPolicyBO> getPersonalAchievementMonthlyDetail(AchievementMonthlyDetailVO achievementMonthlyDetailVO);

    /**
     * 获取个人业绩排名
     * @param achievementRankingVO 业绩排名vo
     * @return bo列表
     */
    List<AchievementRankingBO> getAchievementRank(AchievementRankingVO achievementRankingVO);

    /**
     * 获取产品销量排名
     * @param achievementRankingVO 产品销量排名vo
     * @return bo列表
     */
    List<ProductSaleRankingBO> getProductSalesRankingList(AchievementRankingVO achievementRankingVO);

    /**
     * 判断开始时间和结束时间相隔是否大于一年
     * @param startTime 开始日期
     * @param endTime 结束日期
     */
    void decideDate(Date startTime, Date endTime);

    /**
     * 判断录入日期范围是否符合配置
     * @param startTime 开始日期
     * @param endTime 结束日期
     */
    void decideDateRange(Date startTime,Date endTime);
}
